Capacité et usage des hébergements touristiques

skim(force(capacites))
Data summary
Name force(capacites)
Number of rows 13
Number of columns 60
_______________________
Column type frequency:
character 1
numeric 59
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
dep 0 1 6 6 0 13 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
pop_dpt 0 1 451356.92 402401.71 75949 189824 278217 479754 1376737 ▇▃▁▁▂
hbgt_collectif 0 1 12131.54 11750.86 0 4288 6727 16248 36347 ▇▂▁▁▂
hbgt_locatif 0 1 15882.77 9877.90 2972 10569 13392 21106 34328 ▆▇▇▁▃
hbgt_plein_air 0 1 35434.69 39402.97 4383 8886 18796 35451 125262 ▇▂▁▁▂
hbgt_hotel 0 1 8377.38 7749.84 118 2536 6912 10231 23963 ▇▂▂▁▂
hbgt_total 0 1 71826.38 64100.43 8947 26512 60279 84641 216870 ▇▅▁▁▂
sem_01 0 1 230673.85 189880.57 41943 97033 121238 280736 572653 ▇▂▁▁▃
sem_02 0 1 123568.31 119848.13 17393 47342 59410 159166 381328 ▇▂▁▁▂
sem_03 0 1 134551.85 130573.91 19463 48995 63320 182171 420573 ▇▁▂▁▂
sem_04 0 1 120701.77 112441.66 16806 47535 55459 145802 355608 ▇▃▁▁▂
sem_05 0 1 127313.00 118343.16 19079 47770 56812 156956 366638 ▇▃▁▁▂
sem_06 0 1 149516.62 136791.92 18806 49486 67155 192143 416787 ▇▂▁▁▂
sem_07 0 1 185569.46 160239.04 25031 69195 95625 230398 480970 ▇▁▂▁▂
sem_08 0 1 208421.62 173691.40 36061 87477 109423 245686 509484 ▇▂▁▁▃
sem_09 0 1 193770.46 160928.29 37129 82086 94732 213628 495156 ▇▃▁▁▃
sem_10 0 1 193512.77 167199.60 33015 80766 90601 221660 507064 ▇▃▁▁▂
sem_11 0 1 146192.54 126719.81 27056 59318 70948 173915 396748 ▇▃▁▁▂
sem_12 0 1 182607.38 163889.61 30182 75743 92362 221875 512012 ▇▃▁▁▂
sem_13 0 1 268951.46 236338.09 44935 102701 127688 371400 808824 ▇▂▂▁▁
sem_14 0 1 218537.15 200206.85 39857 92792 105131 321637 707421 ▇▁▂▁▁
sem_15 0 1 229040.54 218131.23 50817 91117 111756 337188 783785 ▇▂▁▁▁
sem_16 0 1 279906.38 253400.44 67829 114064 152124 407006 937254 ▇▂▂▁▁
sem_17 0 1 251633.31 261025.42 59662 89524 123062 403721 979203 ▇▃▁▁▁
sem_18 0 1 272584.54 247086.36 67512 105638 162211 377847 913211 ▇▂▂▁▁
sem_19 0 1 349460.77 322686.84 92999 138763 207948 493359 1231192 ▇▃▁▁▁
sem_20 0 1 231538.46 193266.08 54932 102692 131935 325703 716827 ▇▂▃▁▁
sem_21 0 1 162638.54 154436.98 39612 64735 94834 247816 580704 ▇▂▂▁▁
sem_22 0 1 270532.00 246199.10 62978 118656 136799 388686 886621 ▇▂▂▁▁
sem_23 0 1 272986.46 242498.53 67249 115684 139464 375733 878293 ▇▂▂▁▁
sem_24 0 1 302724.15 284499.12 72553 119928 144888 428489 1025954 ▇▂▂▁▁
sem_25 0 1 330518.23 307718.58 75505 127594 169239 464569 1121003 ▇▂▂▁▁
sem_26 0 1 378794.31 343652.20 84783 158299 200003 513192 1260598 ▇▂▂▁▁
sem_27 0 1 443975.92 402083.69 115709 180573 243396 576698 1489779 ▇▃▁▁▁
sem_28 0 1 552058.23 495376.59 152168 209592 319541 708130 1773125 ▇▃▁▁▁
sem_29 0 1 611580.31 575155.69 155674 223558 370825 722514 2042483 ▇▃▁▁▁
sem_30 0 1 660041.23 597731.57 167292 241873 423421 759909 2164097 ▇▃▁▁▁
sem_31 0 1 662996.85 624157.52 189349 250514 409539 761730 2244237 ▇▃▁▁▁
sem_32 0 1 728025.15 708976.59 213599 261964 453454 836694 2562412 ▇▂▁▁▁
sem_33 0 1 753688.15 724802.76 208458 255989 471754 890552 2599054 ▇▃▁▁▁
sem_34 0 1 613008.15 606665.60 131998 200760 350371 718988 2152288 ▇▃▁▁▁
sem_35 0 1 374716.92 376342.06 71965 130617 187677 472345 1340889 ▇▃▁▁▁
sem_36 0 1 381906.15 377369.73 87644 133379 180292 531091 1348689 ▇▂▁▁▁
sem_37 0 1 373028.23 366212.13 75100 122924 162607 529065 1294211 ▇▂▁▁▁
sem_38 0 1 327084.31 314463.29 66420 114971 141010 447897 1105771 ▇▂▂▁▁
sem_39 0 1 271135.08 250908.95 56896 93996 126151 371733 872131 ▇▂▁▁▁
sem_40 0 1 245424.23 225061.04 44813 90766 107758 332395 762814 ▇▂▂▁▁
sem_41 0 1 242459.31 218085.20 49687 96659 110672 354415 721886 ▇▂▂▁▂
sem_42 0 1 252033.23 238302.57 56364 100918 135110 373916 810593 ▇▁▂▁▁
sem_43 0 1 283843.92 256790.85 74081 118118 159256 430990 906239 ▇▁▂▁▁
sem_44 0 1 288581.46 255833.60 78525 122245 156966 446706 890295 ▇▁▂▁▁
sem_45 0 1 189287.92 189871.64 32034 75427 89083 276069 625306 ▇▁▂▁▂
sem_46 0 1 170546.77 174529.13 29174 64817 78385 243637 575045 ▇▂▁▁▂
sem_47 0 1 167229.69 175986.20 25124 60271 73355 246953 552157 ▇▁▂▁▂
sem_48 0 1 154722.08 165044.63 24002 53676 68237 236731 516119 ▇▁▂▁▂
sem_49 0 1 129402.38 133463.00 15871 43952 57494 187164 396467 ▇▁▂▁▂
sem_50 0 1 133085.46 139856.14 18754 47147 57458 203592 420665 ▇▁▂▁▂
sem_51 0 1 196420.77 175167.45 37299 89461 108732 288989 564821 ▇▁▂▁▂
sem_52 0 1 359045.62 270587.08 74216 160462 215260 484494 864340 ▇▂▁▁▂
sem_53 0 1 61034.62 49447.83 12634 26681 29585 77267 153813 ▇▁▂▁▃
# TODO c'est une time-série, on fera un petit ridge-line plot: https://www.data-to-viz.com/graph/ridgeline.html
hebergement_ts <- force(capacites) %>%
  select(dep,starts_with("sem_")) %>% 
  mutate(sem_53 = 7*sem_53, dep = as.factor(dep)) %>% # la derniere semaine ne fait qu'une journee, ça fait tâche sur les graphes
  pivot_longer(-dep, names_to = "semaine", names_prefix = "sem_", values_to="touristes") %>%
  mutate_at("semaine",as.numeric) %>% 
  mutate(date = ymd("2018-01-01")+(semaine-1)*7) %>% 
  as_tsibble(index=date, key=dep)
# on plot pour voir
ggplot(hebergement_ts)+
  geom_line(aes(x=date,y=touristes/1e6, color=dep), size=1)+
  scale_fill_continuous(guide = guide_legend()) +
  theme_minimal()+
  theme(legend.position="bottom") +
  ggtitle("Capacité occupée par departement et par semaine") + ylab("Nombre de touristes (Millions) par semaine")

# le meme en ridge line plot
ggplot(hebergement_ts)+
  geom_ridgeline( aes(x = date, height = touristes/1e6, y = fct_reorder(dep,touristes)), alpha=0.7) +
  scale_fill_continuous(guide = guide_legend()) +
  theme(legend.position="bottom") +
  ggtitle("Mais qui dors ou et quand ?", subtitle ="Occupation des hébergements touristiques par departement") + ylab("Nombre de touristes par semaine (Millions) ")

Un ordre s’impose parmi les départements pour rendre ça beau… Ici, c’est l’ordre imposé par le nombre de touristes qui s’applique. On voit une difference entre les departements à tourisme saisonnier et la haute-garonne

Nuitées occuppées relativement à la capacité totale

Si on veut developper le tourisme, il faut remplir les trous… On a le total de capacité alors on y va

hebergement_pcent_ts <-  force(capacites) %>%
  mutate(dpt = as.factor(dep)) %>% 
  group_by(dep) %>% 
  mutate_at(vars(starts_with("sem_")), ~./hbgt_total/7) %>% 
  select(dep,starts_with("sem_")) %>% 
  mutate(sem_53 = 7*sem_53) %>% # la derniere semaine ne fait qu'une journee, ça fait tache sur les graphes
  pivot_longer(-dep, names_to = "semaine", names_prefix = "sem_", values_to="touristes") %>%
  mutate_at("semaine",as.numeric) %>% 
  mutate(date = ymd("2018-01-01")+(semaine-1)*7) %>% 
  as_tsibble(index=date, key=dep)

Sont-ils bien tous des touristes ?

ggplot(hebergement_pcent_ts)+
  geom_ridgeline( aes(x = date, height = touristes, y = fct_reorder(dep,touristes)), alpha=0.5, color="darkred", min_height = .5, scale=.5) +
  geom_ridgeline( aes(x = date, height = 1, y = fct_reorder(dep,touristes)), alpha=0.01, color="black", scale=.5, size=0.1) +
  scale_fill_continuous(guide = guide_legend()) +
  theme(legend.position="bottom") +
  ggtitle("Quelle saison touristique dqns chaque département ?", subtitle="Occupation des hébergements touristiques par departement, 100 % représenté par la fine ligne noire, on ne représente pas en dessous de 50%") + ylab("Nombre de voyageurs par semaine (pourcent) ")

Hormis dans l’Aveyron et les Hautes Py., la capacité d’hébergement touristique est toujours dépassée. On a donc capturé ici des voyageurs qui ne sont pas des touristes.

nuités.xlsx

skim(force(nuitees))
Data summary
Name force(nuitees)
Number of rows 365
Number of columns 15
_______________________
Column type frequency:
Date 1
numeric 14
________________________
Group variables None

Variable type: Date

skim_variable n_missing complete_rate min max median n_unique
date 0 1 2018-01-01 2018-12-31 2018-07-02 365

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
dpt_09 0 1 12809.52 8471.74 0 7192 10169 14890 38392 ▅▇▂▂▁
dpt_11 0 1 44248.50 29902.80 0 22268 36910 53581 136945 ▇▇▂▁▁
dpt_12 0 1 21766.36 15344.57 0 11089 17433 26522 71531 ▇▇▂▂▁
dpt_30 0 1 58576.77 33726.57 0 32914 50704 71167 152483 ▃▇▅▁▂
dpt_31 0 1 78391.07 21993.84 0 65346 76484 93139 161793 ▁▃▇▂▁
dpt_32 0 1 15606.96 9810.85 0 8723 13027 17892 55238 ▇▇▂▂▁
dpt_34 0 1 136344.68 86685.96 0 73504 116519 166126 401637 ▆▇▂▁▁
dpt_46 0 1 21587.89 16734.47 0 9775 16892 25517 73458 ▇▆▂▁▁
dpt_48 0 1 9641.82 7344.05 0 4174 8263 11919 34037 ▇▇▁▁▁
dpt_65 0 1 30035.53 17802.03 0 16688 27593 38164 94459 ▆▇▃▂▁
dpt_66 0 1 87119.03 64963.94 0 43922 65600 100942 283421 ▇▇▂▁▂
dpt_81 0 1 17362.90 9149.06 0 11270 15073 20689 44735 ▂▇▃▂▁
dpt_82 0 1 16519.64 7428.19 0 11288 15263 19651 38910 ▁▇▆▂▁
total_occitanie 0 1 550010.70 316855.71 0 321768 461712 656451 1491112 ▃▇▃▁▁
# TODO c'est une time-série, on fera un petit ridge-line plot: https://www.data-to-viz.com/graph/ridgeline.html
nuitee_ts <- force(nuitees_td) %>% as_tsibble(index= date, key=dep)
ggplot(nuitee_ts)+
  geom_line(aes(x=date,y=`nuitees`, color=dep), size=1)+
  scale_fill_continuous(guide = guide_legend()) +
  theme_minimal()+
  theme(legend.position="bottom")

# les NA dans les valeurs rends impossible la comparaison entre nuités et le fct_reorder bouhhh
median_na <- function(x) {
  median(x,na.rm = TRUE)
}
# le meme en ridge line plot
ggplot(nuitee_ts)+
  geom_ridgeline( aes(x = date, height = nuitees/1e5, y = fct_reorder(dep, `nuitees`, .fun=median_na)), alpha=0.5) +
  scale_fill_continuous(guide = guide_legend()) +
  theme(legend.position="bottom")+
  ggtitle("nombre de nuitées (x100k)")

Il y a plusieurs accidents dans plein de départements simultanément. Là encore même distingo entre le 31 et les autres departements.

Il y a une saisonnalité à la semaine qu’il faut relier aux évènements extérieurs

Est-ce qu’on peut imaginer un effet whaou sur un bubble plot animé style le fameux Gapminder Gapminder par gganimate

par_origines.xlsx

skim(force(par_origines))
Data summary
Name force(par_origines)
Number of rows 493235
Number of columns 8
_______________________
Column type frequency:
character 2
Date 1
numeric 5
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
org 0 1 2 8 0 108 0
dest 0 1 2 2 0 13 0

Variable type: Date

skim_variable n_missing complete_rate min max median n_unique
date 0 1 2018-01-01 2018-12-31 2018-07-05 365

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
volume 0 1 407.01 1175.56 0 35 108 324 41517 ▇▁▁▁▁
vacances_org 0 1 0.51 0.67 0 0 0 1 2 ▇▁▅▁▁
temp_midi 0 1 17.12 7.94 -7 11 17 24 36 ▁▆▇▇▃
meteo 0 1 2.04 1.41 0 1 2 3 4 ▇▆▇▇▇
nb_evt 0 1 0.44 0.75 0 0 0 1 6 ▇▁▁▁▁
# il y a des duplicates. impossible de le faire rentrer dans ne time-series sans les enlever !
origines_ts <- force(par_origines_td) %>%
  mutate(dep_dest = fct_relevel(dep_dest, c("34","31","11","66","30","65","12","46","82","81","32","09","48")),
         dep_org  = fct_reorder(dep_org,-volume)) %>% 
  mutate_at("meteo",as.ordered) %>% 
  group_by(date, dep_org, dep_dest) %>% summarise_all(~last(.)) %>% # filter duplicate
  as_tsibble(index= date, key=c("dep_org","dep_dest"))
# un petit facet-plot pour la route
ggvolume <-ggplot(origines_ts %>% filter(dep_org!="Autres"))+
  geom_line(aes(x=date,y=`volume`/1e3, color=dep_org), size=.4, alpha=.6)+
  facet_wrap("dep_dest") +
  scale_fill_continuous(guide = guide_legend()) + ylim(0,25) +
  ggtitle("Mais d'où viennent-ils", subtitle = "Origine identifiée des voyageurs dans chaque departement visité")+
  theme_minimal()+ theme(legend.position="none")+ scale_color_viridis_d(option="E") 
ggplotly(ggvolume)
# un petit facet-plot des temperatures (qui n'a aucun interêt)
ggplot(origines_ts )+
  geom_line(aes(x=date,y=temp_midi), color="navy", alpha=0.6)+
  facet_wrap("dep_dest") +
  scale_fill_continuous(guide = guide_legend()) +
  theme_minimal()+
  theme(legend.position="none")

Globalement, on n’y voit rien… Un phénomene intéressant d’une origine spécifique des voyageurs de loin majoritaire en Haute-garonne… ~Va savoir laquelle sur un graphe, Charles…~ Avec plotly, on sait que c’est “Autres”. Super Michel…

Si c’est intéressant, on pourrait faire des catégories aggrégées genre “dep_limitrophes”, “dep_2éme_couronne”, “dep_lointains”, “pays_limitrophes”, “pays_lointains”, mais il y a un peu de boulot…

Complements.

evenements <- force(comp_evenements) %>% 
  mutate_at("num", as.integer)
skim(evenements)
Data summary
Name evenements
Number of rows 202
Number of columns 5
_______________________
Column type frequency:
character 1
Date 2
factor 1
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
evt 0 1 9 60 0 202 0

Variable type: Date

skim_variable n_missing complete_rate min max median n_unique
deb 0 1 2018-01-07 2018-12-31 2018-07-16 139
fin 0 1 2018-01-19 2018-12-31 2018-07-27 92

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
dep 0 1 FALSE 13 34: 48, 30: 33, 66: 26, 11: 21

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
num 0 1 101.5 58.46 1 51.25 101.5 151.75 202 ▇▇▇▇▇
#on ajoute des quelques évenements nationnaux dans les pics remarquables
fr_evenemt <- tibble(dep = c("ts","ts" ),
                     evt = c("Rentrée scolaire","Gilets Jaunes A-1"),
                     deb = c("2018-09-04","2018-11-17") %>% ymd,
                     fin = c("2018-09-04","2018-11-18") %>% ymd
                     ) %>%
  mutate(dep = str_replace(dep,"ts","34-31-11-66-30-65-12-46-82-81-32-09-48")) %>%
  separate_rows(dep,sep="-")
evenements <- bind_rows(evenements, fr_evenemt)
## Warning in bind_rows_(x, .id): binding factor and character vector, coercing
## into character vector
## Warning in bind_rows_(x, .id): binding character and factor vector, coercing
## into character vector